# -*- coding: utf-8 -*-
# @Time    : 2022/9/17 15:00
# @Author  : JackXia
# @Email   : 915624876@qq.com
# @Tel     : 13168229713
# @File    : 03数组中重复的数字.py
# @Software: PyCharm

"""
找出数组中重复的数字。


在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1：

输入：
[2, 3, 1, 0, 2, 5, 3]
输出：2 或 3
 

限制：

2 <= n <= 100000

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
"""


# class Solution(object):
#     """
#     方法一：利用字典存储数值，value对数值进行计数，计数为2的则为重复数值
#     """
#
#     def findRepeatNumber(self, nums):
#         """
#         :type nums: List[int]
#         :rtype: int
#         """
#         d = {}
#         for n in nums:
#             d[n] = d.get(n, 1) + 1
#             if d.get(n, 1) == 2:
#                 return n


class Solution(object):
    """
    法二：利用集合存储数值，通过判断集合中是否存在，来断定是否重复
    """

    def findRepeatNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        d = set()
        for n in nums:
            if n in d:
                return n
            d.add(n)


if __name__ == '__main__':
    nums = [2, 3, 1, 0, 2, 5, 3]
    print(Solution().findRepeatNumber(nums))
